package com.cysoft.starter.log.core.helper;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;

/**
 * @author 玖零
 * @version v0.0.1
 * @project cysoft-spring-boot-starter-log
 * @package com.cysoft.starter.log.core.helper
 * @date 2025-02-04 23:49
 * @desc 日志帮助类
 */
public class LogHelper {

    private static final Logger logger = LoggerFactory.getLogger(LogHelper.class);

    /**
     * 初始化忽略项集合，将源列表中的元素添加到目标集合中，并通过回调函数设置最终的集合
     *
     * @param targetSet  目标集合，用于存储最终的忽略项
     * @param sourceList 源列表，包含要添加到目标集合中的元素
     * @param setSetter  一个 Consumer 函数式接口，用于设置最终的目标集合
     */
    public static void initIgnore(Set<String> targetSet, List<String> sourceList, Consumer<Set<String>> setSetter) {
        // 处理源列表为空的情况
        sourceList = Optional.ofNullable(sourceList).orElse(Collections.emptyList());
        // 如果源列表为空，记录信息
        if (sourceList.isEmpty()) {
            logger.info("Source list is empty, initializing ignore set with no elements.");
        }
        // 初始化目标集合
        targetSet = Optional.ofNullable(targetSet).orElseGet(() -> Collections.newSetFromMap(new ConcurrentHashMap<>()));
        // 将源列表的元素添加到目标集合中
        targetSet.addAll(sourceList);
        try {
            // 调用 setter 方法设置目标集合
            setSetter.accept(targetSet);
            logger.info("Ignore set initialized successfully with size: {}", targetSet.size());
        } catch (Exception e) {
            // 记录设置忽略集合时的错误信息，并包含目标集合的大小
            logger.error("Error setting ignore set with size: {}. Source list size: {}", targetSet.size(), sourceList.size(), e);
        }
    }
}
